if (${USE_GPU})
    add_subdirectory(linear_algebra/blas/level3/sgemm/gpu)
    add_subdirectory(linear_algebra/chain_mm/gpu)
    if (${USE_CUDNN})
        add_subdirectory(DNN/blocks/LSTM/gpu)
        add_subdirectory(DNN/blocks/LSTM/gpu_lib)
    endif()
    add_subdirectory(tensors/baryon/gpu_tiramisu_make_fused_baryon_blocks_correlator)
    add_subdirectory(tensors/baryon/gpu_tiramisu_make_fused_identical_baryon_blocks_correlator)
    add_subdirectory(tensors/baryon/gpu_single_tiramisu_make_fused_identical_baryon_blocks_correlator)
    add_subdirectory(tensors/dibaryon/gpu_tiramisu_make_fused_identical_dibaryon_blocks_correlator)
    add_subdirectory(tensors/dibaryon/gpu_single_tiramisu_make_fused_identical_dibaryon_blocks_correlator)
    add_subdirectory(tensors/dibaryon/gpu_tiramisu_make_fused_dibaryon_blocks_correlator)
    add_subdirectory(tensors/dibaryon/gpu_tiramisu_make_fused_dibaryon_blocks_correlator_single_time_slice)
endif()
add_subdirectory(DNN/layers/convolution/direct/cpu)
add_subdirectory(DNN/layers/convolution/direct/cpu_3channels)
add_subdirectory(DNN/layers/convolution/direct/sparse)
add_subdirectory(DNN/layers/convolution/direct/sparse_stride2_convolution)
add_subdirectory(DNN/layers/convolution/direct/sparse_32channels)
add_subdirectory(DNN/layers/convolution/direct/unrolled_convolution)
add_subdirectory(DNN/layers/convolution/direct/cpu_sparse_with_dense)
add_subdirectory(DNN/layers/convolution/direct/unrolled_conv2)
add_subdirectory(DNN/layers/convolution/direct/unrolled_conv3)
add_subdirectory(DNN/layers/convolution/direct/cpu_optimal_unrolled)
add_subdirectory(DNN/layers/bn/cpu)
add_subdirectory(DNN/layers/relu/cpu)
add_subdirectory(DNN/layers/maxpool/cpu)
add_subdirectory(DNN/layers/transpose_conv)
add_subdirectory(DNN/blocks/conv2/cpu/dense)
add_subdirectory(DNN/blocks/LSTM/cpu)
add_subdirectory(DNN/blocks/LSTM/cpu_lib)
add_subdirectory(DNN/blocks/LSTM/cpu_lib_sparse)
add_subdirectory(DNN/blocks/vggBlock/cpu/dense)
add_subdirectory(DNN/blocks/vggBlock/cpu/sparse)
add_subdirectory(DNN/blocks/vggBlock/cpu/sparse_32channels)
add_subdirectory(DNN/blocks/vggBlock/cpu/sparse_32channels_512_512_14)
add_subdirectory(DNN/blocks/vggBlock/cpu/sparse_32channels_512_512_28)
add_subdirectory(DNN/blocks/Conv-ReLU-Conv-ReLU/cpu/sparse_32channels_512_512_14)
add_subdirectory(DNN/blocks/Conv-ReLU-Conv-ReLU/cpu/sparse_32channels_256_512_28)
add_subdirectory(DNN/blocks/fusedresNet/cpu/dense)
add_subdirectory(DNN/blocks/fusedresNet_inference/cpu/sparse)
add_subdirectory(DNN/blocks/fusedresNet_inference/cpu/sparse_16_16_stride2)
add_subdirectory(DNN/blocks/fusedresNet_inference/cpu/sparse_16_32_stride2)
add_subdirectory(DNN/blocks/fusedresNet_inference/cpu/sparse_32_64_stride2)
add_subdirectory(DNN/blocks/fusedresNet_inference/cpu/sparse_16_16)
add_subdirectory(DNN/blocks/fusedresNet_inference/cpu/sparse_32_32)
add_subdirectory(DNN/blocks/fusedresNet_inference/cpu/sparse_64_64)
add_subdirectory(DNN/blocks/fusedresNet_inference/cpu/dense)
add_subdirectory(DNN/blocks/DenseNetBlock/cpu/dense)
add_subdirectory(DNN/blocks/Conv-ReLU-MaxPool/cpu/dense)
add_subdirectory(DNN/blocks/Conv-ReLU-MaxPool/cpu/sparse)
add_subdirectory(DNN/blocks/Conv-ReLU-MaxPool/cpu/sparse_3_16_224)
add_subdirectory(DNN/blocks/Resize-Conv-ReLU-MaxPool/cpu/dense)
add_subdirectory(DNN/blocks/Resize-Conv-ReLU-MaxPool/cpu/sparse)
add_subdirectory(DNN/blocks/Conv-Relu-FC-Softmax/cpu/dense)
add_subdirectory(DNN/blocks/Add-ReLU/cpu)
add_subdirectory(DNN/blocks/Add-ReLU/cpu_32_16_58)
add_subdirectory(DNN/blocks/Add-ReLU/cpu_32_32_30)
add_subdirectory(DNN/blocks/Add-ReLU/cpu_32_64_16)
add_subdirectory(DNN/end_to_end_architectures/End_To_End_VGG19)
add_subdirectory(DNN/end_to_end_architectures/End_To_End_ResNet)

add_subdirectory(FlexNLP/LSTM)
add_subdirectory(FlexNLP/LSTM_manual_data_copy)

add_subdirectory(FlexNLP/LSTM_partitioned_same_accelerator)
add_subdirectory(FlexNLP/LSTM_partitioned_multi_accelerators)
